/**
 *   保留指定小数位  不格式化
 */
export function numberPrecision(num, precision) {
  if (!isNotNull(num)) {
    return ''
  }
  if (num == 'Infinity') {
    return '无穷大'
  }
  if (num == '-Infinity') {
    return '无穷小'
  }
  if (isNaN(num)) {
    num = unFormatAmount(num)
  }
  if (num == '-') {
    return num
  }
  if (isNaN(num)) {
    return ''
  }

  let number = Number(num)
  number = number.toFixed(precision)
  if (number.toString().indexOf('e') > -1) {//科学计数法直接返回
    let d = number.toString().indexOf('.') + 5
    let e = number.toString().indexOf('e')
    return number.toString().substring(0, d) + number.toString().substring(e, number.toString().length)
  }
  return Number(number)
}

/**
 *  列表 千分位格式化2位小数
 */
export function formartTableP2(row, column, cellValue) {
  return formartNumber(cellValue, 2)
}

/**
 *  列表 千分位格式化3位小数
 */
export function formartTableP3(row, column, cellValue) {
  return formartNumber(cellValue, 3)
}

/**
 *  列表 千分位格式化4位小数
 */
export function formartTableP4(row, column, cellValue) {
  return formartNumber(cellValue, 4)
}

/**
 *  表单 千分位格式化2位小数
 */
export function formartFormP2(cellValue) {
  return formartNumber(cellValue, 2)
}

/**
 *  表单 千分位格式化4位小数
 */
export function formartFormP4(cellValue) {
  return formartNumber(cellValue, 4)
}
/**
 *  表单 千分位格式化4位小数
 */
export function formartFormP8(cellValue) {
  return formartNumber(cellValue, 8)
}
/**
 *  列表 千分位格式化5位小数
 */
export function formartTableP5(row, column, cellValue) {
  return formartNumber(cellValue, 5)
}

/**
 *  列表 千分位格式化6位小数
 */
export function formartTableP6(row, column, cellValue) {
  return formartNumber(cellValue, 6)
}

/**
 *    千分位格式化 保留指定小数位
 */
export function formartNumber(num, precision) {
  if (num !== '' && num !== undefined && num !== null)
    return formatAmount(num, precision)
  else return ''
}

/**
 *    千分位格式化转为正常数字
 */
export function unFormartNumber(sNum) {
  if (sNum !== '' && sNum !== undefined && sNum !== null)
    return Number(unFormatAmount(sNum))
  else return ''
}

/**
 *    千分位格式化 保留指定小数位 0显示为0
 */
export function formatAmountZero(num, precision) {
  if (!isNotNull(num)) {
    return ''
  }
  if (num == 'Infinity') {
    return '无穷大'
  }
  if (num == '-Infinity') {
    return '无穷小'
  }
  if (isNaN(num)) {
    num = unFormatAmount(num)
  }
  if (num == '-') {
    return num
  }
  if (isNaN(num)) {
    return ''
  }
  let number = Number(num)
  number = number.toFixed(precision)
  if (number.toString().indexOf('e') > -1) {//科学计数法直接返回
    let d = number.toString().indexOf('.') + 5
    let e = number.toString().indexOf('e')
    return number.toString().substring(0, d) + number.toString().substring(e, number.toString().length)
  }
  if (number < 0) {
    return thousand(number)
  } else {
    return thousand(number)
  }

}

export function formatAmount(num,precision){
  let reslut = new Number(num).toLocaleString('zh-CN', { useGrouping:false,maximumFractionDigits: precision })
  return 0==reslut?0:reslut.toLocaleString()
}
/**
 *  百分比格式化 保留2位 0展示空
 */
export function formartEmptyTablePercentP2(row, column, cellValue) {
  return formatAmountEmpty(cellValue * 100, 2)
}

/**
 *  列表 千分位格式化2位小数 0展示空
 */
export function formartEmptyTableP2(row, column, cellValue) {
  return formatAmountEmpty(cellValue, 2)
}
/**
 *   0展示空 千分位格式化 保留指定小数位
 */
export function formatAmountEmpty(num, precision) {
  if(Number(num)==0){
    return '';
  }
  if (!isNotNull(num)) {
    return ''
  }
  if (num == 'Infinity') {
    return '无穷大'
  }
  if (num == '-Infinity') {
    return '无穷小'
  }
  if (isNaN(num)) {
    num = unFormatAmount(num)
  }
  if (num == '-') {
    return num
  }
  if (isNaN(num)) {
    return ''
  }
  let number = Number(num)
  number = number.toFixed(precision)
  if (number.toString().indexOf('e') > -1) {//科学计数法直接返回
    let d = number.toString().indexOf('.') + 5
    let e = number.toString().indexOf('e')
    return number.toString().substring(0, d) + number.toString().substring(e, number.toString().length)
  }
  if (number < 0) {
    return thousand(number)
  } else {
    return thousand(number)
  }

}
/**
 *  百分比格式化 保留4位
 */
export function formartTablePercentP4(row, column, cellValue) {
  return formartNumber(cellValue * 100, 4)
}
/**
 *  百分比格式化 保留8位
 */
export function formartTablePercentP8(row, column, cellValue) {
  return formartNumber(cellValue * 100, 8)
}
/**
 *  百分比格式化 保留8位
 */
export function formartTablePercentP12(row, column, cellValue) {
  return formartNumber(cellValue * 100, 12)
}
/**
 *  百分比格式化 保留8位
 */
export function formartTablePercentP16(row, column, cellValue) {
  return formartNumber(cellValue * 100, 16)
}
/**
 *  百分比格式化 保留2位
 */
export function formartTablePercentP2(row, column, cellValue) {
  return formartNumber(cellValue * 100, 2)
}

/**
 *  百分比格式化 保留2位
 */
export function formartTablePercentP3(row, column, cellValue) {
  return formartNumber(cellValue * 100, 3)
}

/**
 *  列表 千分位格式化
 */
export function formartTableWithSymbol(row, column, cellValue) {
  return formartNumber(cellValue * 100, 0) + '%'
}

/**
 *  列表 千分位格式化
 */
export function formartTableWithP2Symbol(cellValue) {
  if (cellValue !== '' && cellValue !== undefined && cellValue !== null)
    return formartNumber(cellValue * 100, 2) + '%'
  else return ''
}

/**
 *    千分位格式化方法
 */
export function thousand(a) {
  var arr = new Array()
  var xiaoshu = ''  //用来记录参数小数数值包括小数点
  var zhengshu = ''  //用来记录参数录整数数值
  if (-1000 < a && a < 1000) {    //当参数小于1000的时候直接返回参数
    return a
  } else {
    let prefix = ''
    if (a <= -1000) {
      prefix = '-'
      a = a.toString().substring(1)
    }
    let t = a.toString()   //将整数转换成字符串
    if (t.indexOf('.') > 0) {   //如果参数存在小数，则记录小数部分与整数部分
      var index = t.indexOf('.')
      xiaoshu = t.slice(index, t.length)
      zhengshu = t.slice(0, index)
    } else {   //否则整数部分的值就等于参数的字符类型
      zhengshu = t
    }
    var num = parseInt(zhengshu.length / 3)   //判断需要插入千位分割符的个数

    //将整数1234567890部分拆分为2部分，变量head:1   变量body:123456789
    var head = zhengshu.slice(0, zhengshu.length - num * 3)
    if (head.length > 0) {  //如果head存在，则在head后面加个千位分隔符，
      head += ','
    }
    var body = zhengshu.slice(zhengshu.length - num * 3, zhengshu.length)

    //将body字符串123456789转换成一个字符数组arr2 = ['123','456','789']
    var arr2 = new Array()
    for (var i = 0; i < num; i++) {
      arr2.push(body.slice(i * 3, i * 3 + 3))
    }
    body = arr2.join(',')   //将数组arr2通过join(',')   方法，拼接成一个以逗号为间隔的字符串

    zhengshu = head + body  //拼接整数部分
    var result = prefix + zhengshu + xiaoshu   //最后拼接整数和小数部分
    return result   //返回结果
  }
}

/**
 *    千分位格式化转为正常数字方法
 */
export function unFormatAmount(numStr) {
  if (isNotNull(numStr)) {
    let num = String(numStr).replace(new RegExp(',', 'g'), '')
    num = String(num).replace(/([$]+)|([￥]+)|([HK$]+)|([€]+)|([J￥]+)|([￡]+)|/g, '')

    if (isNaN(num)) {
      return numStr
    } else {
      return Number(num)
    }
  } else {
    return ''
  }
}

/**
 *    判断字符是否为空
 */
export function isNotNull(ele) {
  if (typeof ele === 'undefined' || ele == null || ele === '' || ele === undefined) {
    return false
  }
  return true
}

/**
 *    判断字符是否为空
 */
export function isNull(ele) {
  return !isNotNull(ele)
}
/**
 *  表单 格式化2位小数
 */
export function formartFormP2WithUseGrouping(num) {
  if (num !== '' && num !== undefined && num !== null)
    return formatAmountWithUseGrouping(num, 2)
  else return ''
}

export function formatAmountWithUseGrouping(num,precision){
  let reslut = new Number(num).toLocaleString('zh-CN', {maximumFractionDigits: precision })
  return 0==reslut?0:reslut.toLocaleString()
}

/**
 *  表单 格式化4位小数
 */
 export function formartFormP4WithUseGrouping(num) {
  if (num !== '' && num !== undefined && num !== null)
    return formatAmountWithUseGrouping(num, 4)
  else return ''
}

/**
 *  表单 格式化6位小数
 */
 export function formartFormP6WithUseGrouping(num) {
  if (num !== '' && num !== undefined && num !== null)
    return formatAmountWithUseGrouping(num, 6)
  else return ''
}
/**
 *  表单 格式化8位小数
 */
 export function formartFormP8WithUseGrouping(num) {
  if (num !== '' && num !== undefined && num !== null)
    return formatAmountWithUseGrouping(num, 8)
  else return ''
}
/**
 *  列表 格式化
 */
export function formartTableWithP3Symbol(cellValue) {
  if (cellValue !== '' && cellValue !== undefined && cellValue !== null)
    return formartNumber(cellValue * 100, 3) + '%'
  else return ''
}
